﻿// @include "code/Browser.js"
// @include "code/Type.js"
// @include "extend/Debug.js"
// @include "code/Array.js"
/**
 * @fileOverview dom文档onready函数工具
 * 
 * @version qinglan_onready 1.0
 * @static
 * @author wxq wxqqh@qq.com
 */
/**
 * 命名空间
 * 
 * @namespace
 * @type Object
 */
window.qinglan = window.qinglan || {};

/**
 * dom加载完后即执行fun
 * 
 * @param {Function}
 *            fun 需要在domOnready时候执行的方法
 * @type function
 */
qinglan.onReady = function(fun) {
	if (qinglan.Type.isFunction(fun)) {
		qinglan.onReady._loadingFun.push(fun);
	} else {
		qinglan.Debug.error('The Object :[' + fun + '] is not a Function!!');
		return false;
	}
	if (qinglan.onReady._firstTime) {
		qinglan.onReady._firstTime = false;
		if (!qinglan.Browser.isIE) {
			document.addEventListener('DOMContentLoaded', function() {
						qinglan.onReady._fireFun();
					}, false);
			return false;
		}
		// 尝试检测document.doScroll是否可以用
		(function() {
			try {
				document.documentElement.doScroll('left');
			} catch (e) {
				qinglan.onReady._timeout = setTimeout(arguments.callee, 0);
				return false;
			}
			qinglan.onReady._fireFun();
			clearTimeout(qinglan.onReady._timeout);
		})();
		//
		document.onreadystatechange = function() {
			if (document.readyState == 'complete') {
				document.onreadystatechange = null;
				qinglan.onReady._fireFun();
			}
		};
		return false;
	}

};
/**
 * 是否dom加载完成
 * 
 * @private
 * @field
 * @type Boolean
 */
qinglan.onReady.isReady = false;
/**
 * 需要dom加载完成时候调用的函数
 * 
 * @private
 * @field
 * @type Array
 */
qinglan.onReady._loadingFun = new Array();
/**
 * timeout缓存对象
 * 
 * @private
 * @field
 * @type Object
 */
qinglan.onReady._timeout = null;
/**
 * 是否第一次进入onready绑定时间
 * 
 * @private
 * @field
 * @type Object
 */
qinglan.onReady._firstTime = true;
/**
 * 进行事件调用
 */
qinglan.onReady._fireFun = function() {
	qinglan.onReady.isReady = true;
	qinglan.Array.each(qinglan.onReady._loadingFun, function(fun) {
				fun.call(window);
			}, window);
	qinglan.onReady._loadingFun = new Array();
};
